package com.leetcode;

import java.math.BigDecimal;
import java.lang.StringBuilder;

/**
 *
 给你两个 非空 的链表，表示两个非负的整数。它们每位数字都是按照 逆序 的方式存储的，并且每个节点只能存储 一位 数字。

 请你将两个数相加，并以相同形式返回一个表示和的链表。

 你可以假设除了数字 0 之外，这两个数都不会以 0 开头。


 */
public class LeetCode2 {

    public static class ListNode {
        int val;
        ListNode next;
        ListNode() {}
        ListNode(int val) { this.val = val; }
        ListNode(int val, ListNode next) { this.val = val; this.next = next; }
    }

    public static void main(String[] args) {
        String str = "249";
        ListNode l1 = stringToListNode(str);
        String str2 = "5649";
        ListNode l2 = stringToListNode(str2);
        ListNode node = addTwoNumbers(l1,l2);
        System.out.println(nodeToString(node));
    }



    public static ListNode addTwoNumbers(ListNode l1, ListNode l2) {
        StringBuilder sb1 =  nodeToString(l1);
        BigDecimal b1 = new BigDecimal(sb1.toString());
        StringBuilder sb2 =  nodeToString(l2);
        BigDecimal b2 = new BigDecimal(sb2.toString());
        BigDecimal b0 = b1.add(b2);
        return stringToListNode(new StringBuilder(b0.toString()).reverse().toString());
    }

    public static ListNode stringToListNode(String source){
        StringBuilder sb = new StringBuilder(source).reverse();
        char [] arry = sb.toString().toCharArray();
        ListNode node = null;
        for(int i = 0;i<arry.length;i++){
            int v = new Integer(String.valueOf(arry[i]));
            if(node == null){
                node = new ListNode(v,null);
            }else{
                node = new ListNode(v,node);
            }
        }
        return node;
    }

    public static StringBuilder nodeToString(ListNode node){
        StringBuilder sb = new StringBuilder();
        sb.append(node.val);
        while(node.next != null){
            node = node.next;
            sb.append(node.val);
        }
        return sb;
    }




}